/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Elyda
 */
public class Provider {

    private QueueManager qm = new QueueManager();
    //OS IDS DOS TÓPICOS E DOS SUBSCRIBERS RESPECTIVAMENTE
    private HashMap<Integer, Integer> tabela = new HashMap();
    private List<Subscriber> listaSubscribers = new ArrayList<Subscriber>();

    //RECEBENDO MSG DO PUBLISHER
    public void receberMensagem(Mensagem msg) {
        //3º PASSO - QUEUE MANAGER ARMAZENA A MENSAGEM(NOSSO CASO ARRAY)
        //SE O ARQUIVAMENTO FOR COM EFETUADO COM SUCESSO, NOTIFICAR OS SUBSCRIBERS
        if (qm.arquivarMensagem(msg)) {
            notificarSubscribers(msg);
        } else {
            System.out.print("ERRO! NO ARQUIVO ");
        }
    }
    //NOTIFICANDO OS SUBSCRIBERS
    public void notificarSubscribers(Mensagem msg) {
        //PERCORRENDO O MAP
        for (Map.Entry<Integer, Integer> entry : tabela.entrySet()) {
            //VERIFICANDO A QUAL TOPICO PERTENCE A MENSAGEM
            if (msg.getIdTopicoDestino()==entry.getKey()) {
                //PERCORRENDO A LISTA DE SUBSCRIBERS E VERIFICANDO QUE SÃO OS ASSINANTES DO 
                //TOPICO REFERIDO
                for (Subscriber subscriber : listaSubscribers) {
                    //SE O SUBSCRIBER FOR ENCONTRADDO NA TABELA
                    if (subscriber.getId()==entry.getValue()) {
                        //EXIBE A MENSAGEM... UFA!!!
                        subscriber.exibirMensagem(msg);
                    }
                }
            }
        }        
    }
    
    //ARMAZENA na tabela A ASSINATURA DE ALGUM TÓPICO
    public void assinarSubscriberTopico(Subscriber subscriber, Topico topico) {
    }
    //EXCLUI DA TABELA A ASSINATURA DE ALGUM TÓPICO

    public void cancelarAssinatura(Subscriber subscriber, Topico topico) {
    }
}
